package com.leslie.wukong.biz.product.handler;

import com.leslie.wukong.biz.product.config.ProductCheckHandlerConfig;
import com.leslie.wukong.biz.product.domain.vo.ProductVO;
import com.leslie.wukong.common.core.domain.RestResult;
import lombok.Getter;
import lombok.Setter;
import org.springframework.stereotype.Component;

import java.util.Objects;

/**
 * ClassName: AbstractCheckHandler
 * Package: com.leslie.wukong.biz.product.handler
 * Description: 抽象类处理器
 *
 *
 * @date: 2024/12/3 18:05
 * @author: itcoder
 */
@Component
public abstract class AbstractCheckHandler {

    /** 当前处理器持有下一个处理器的引用 */
    @Getter
    @Setter
    protected AbstractCheckHandler nextHandler;

    /** 处理器配置 */
    @Getter
    @Setter
    protected ProductCheckHandlerConfig config;

    /**
     * 处理器执行方法
     * @param param
     * @return
     */
    public abstract RestResult<Integer> handle(ProductVO param);

    /**
     * 链路传递
     * @param param
     * @return
     */
    protected RestResult<Integer> next(ProductVO param) {
        if (Objects.isNull(nextHandler)) {
            return RestResult.ok(1);
        }
        // 执行下一个处理器
        return nextHandler.handle(param);
    }
}
